<?php 
/**
 * Autores:Daniel sanchez merlo,Guillermo Rodriguez congosto
 * Asignatura:GIW
 * GRUPO:A
 * Este código es exclusivamente de nuestra propiedad
 */

?>
<?php

class DBHelper{
	
	static private function hashpassword($password){
		$salt=bin2hex(openssl_random_pseudo_bytes(22));
		
		$timeTarget = 0.05;
		$coste = 9;
		
		do {
			$coste++;
			$inicio = microtime(true);
			//$hashedpassword=crypt($password,"$2y$".$coste."$".$salt);
			$hashedpassword=password_hash($password, PASSWORD_BCRYPT, ["cost" => $coste,"salt"=>$salt]);
			$fin = microtime(true);
		} while (($fin - $inicio) < $timeTarget);
		
		return $hashedpassword;
	}
	
	//usuarios
	static function comprobar_usuario($bd,$nick,$password){
		$user = $bd->usuarios->findOne(array('nick'=>$nick));
		var_dump($user);
		if($user){
			if(password_verify($password, $user['password'])){  // crypt($password,$user['password'])==$user['password'];
				return $user;
			}
		}
		return false;
	}
	
	static function registrar_usuario($bd, $dni, $nombre, $apellidos, $nick, $password, $email, $rol){
						
		$usuario=array(
				'dni'=>$dni,
				'nombre'=>$nombre,
				'apellidos'=>$apellidos,
				'email'=>$email,
				'nick'=>$nick,
				'password'=>DBHelper::hashpassword($password),
				'rol'=>$rol
		);

		 return $bd->usuarios->insert($usuario);
		
	}
	
	static function actualizar_usuario($bd, $id, $nombre, $apellidos, $nick, $password, $email){
		
		$usuario=array(
				'nombre'=>$nombre,
				'apellidos'=>$apellidos,
				'email'=>$email,
				'nick'=>$nick
		);
		if(!empty($password)){
			$usuario['password']=DBHelper::hashpassword($password);
		}

		$bd->usuarios->update(array('_id'=>new MongoId($id)),array('$set'=>$usuario));
		return $usuario;
	}
	
	static function encontrar_usuario($bd, $id){
		return $bd->usuarios->findOne(array('_id'=>new MongoId($id)));
	}
	
	
	//teatros
	static function listar_teatros($bd){
		return $bd->teatros->find();
	}
	
	static function recuperar_teatro($bd,$id){
		return $bd->teatros->findOne(array('_id'=>new MongoId($id)));
	}
	
	static function buscar_obra($bd,$search){
		return $bd->teatros->find(array('$text'=> array( '$search'=> $search )));
	}
	
	static function add_teatro($bd, $nombre_obra, $nombre_teatro, $descripcion, $sesion1, $sesion2, $sesion3, $nume_filas, $nume_asientos){
		$teatro=array(
				'nombre_obra'=>$nombre_obra,
				'nombre_teatro'=>$nombre_teatro,
				'descripcion'=>$descripcion,
				'sesion1'=>$sesion1,
				'sesion2'=>$sesion2,
				'sesion3'=>$sesion3,
				'nume_filas'=>$nume_filas,
				'nume_asientos'=>$nume_asientos
		);
	
		$bd->teatros->insert($teatro);
		return $teatro;
	}
	
	static function n_obras($bd){
		return $bd->teatros->count();
	}
	
	static function actualizar_teatro($bd, $id, $nombre_obra, $nombre_teatro, $descripcion, $sesion1, $sesion2, $sesion3, $nume_filas, $nume_asientos){
		
		$teatro=array(
				'nombre_obra'=>$nombre_obra,
				'nombre_teatro'=>$nombre_teatro,
				'descripcion'=>$descripcion,
				'sesion1'=>$sesion1,
				'sesion2'=>$sesion2,
				'sesion3'=>$sesion3,
				'nume_filas'=>$nume_filas,
				'nume_asientos'=>$nume_asientos
		);

		$bd->teatros->update(array('_id'=>new MongoId($id)),array('$set'=>$teatro));
		return $teatro;
	}
	
	static function delete_teatro($bd,$id){
		return $bd->teatros->remove(array('_id'=>new MongoId($id)));
	}
	
	static function recuperar_entradas($bd,$id_teatro,$dia, $sesion){
		return $bd->entradas->find(array('teatro'=>new MongoId($id_teatro), 'dia'=>new MongoDate(strtotime($dia)), 'sesion'=>$sesion));
	}
	
	static function comprar_entrada($bd,$id_teatro, $sesion, $fila, $asiento, $accion, $dia){
		
		$entrada=array(
			'teatro'=>new MongoId($id_teatro),
			'usuario'=>new MongoId($_SESSION['id']),
			'sesion'=>$sesion,
			'fila'=>$fila,
			'asiento'=>$asiento,
			'dia'=>new MongoDate(strtotime($dia))
		);
		
		return $bd->entradas->insert($entrada);
	}
	
	static function eliminar_entrada($bd, $id_teatro, $sesion, $fila, $asiento, $accion, $dia){
		
		$entrada=array(
				'teatro'=>new MongoId($id_teatro),
				'usuario'=>new MongoId($_SESSION['id']),
				'sesion'=>$sesion,
				'fila'=>$fila,
				'asiento'=>$asiento,
				'dia'=>new MongoDate(strtotime($dia))
		);
		
		return $bd->entradas->remove($entrada);
	}
	
	static function entradas_compradas($bd){
		return $bd->entradas->find(array('usuario'=>new MongoId($_SESSION['id'])))->sort(array('dia'=>-1,'sesion'=>-1));
	}
	
	static function valorar_obra($bd,$id_teatro,$comentario,$puntuacion){
		
		$valoracion=array(
				'usuario'=>new MongoId($_SESSION['id']),
				'comentario'=>$comentario,
				'puntuacion'=>$puntuacion,
				'fecha'=>new MongoDate()
		);
		
		$bd->teatros->update(array('_id'=>new MongoId($id_teatro)),array('$push'=>array("valoraciones"=>$valoracion)));
	}
	
	static function recuperar_valoraciones_obra_fecha($bd,$id){
	
		
		return $bd->teatros->aggregate(array( 
				
			array('$match'=> array('_id' => new MongoId($id))),
			//array('$unwind'=>'$valoraciones'),
			array( '$sort'=>array('valoraciones.fecha'=> 1))
			)
		);
		
	}
	
	static function recuperar_valoraciones_obra_puntuacion($bd,$id){
	
	
		return $bd->teatros->aggregate(array(
	
				array('$match'=> array('_id' => new MongoId($id))),
				//array('$unwind'=>'$valoraciones'),
				array( '$sort'=>array('valoraciones.puntuacion'=> -1))
		)
		);
	
	}
	
	static function obra_valorada($bd,$id){
		return (boolean)$bd->teatros->findOne(array("_id"=>new MongoId($id),"valoraciones.usuario"=>new MongoId($_SESSION['id'])));
	}
}